Welcome to pandas!

8.5 将行方向转为列方向

行索引数据转成列索引数列,是指将分布在行方向展示的数据,转换到列方向来展示,可以使用df.unstack()和df.pivot两个函数完成,最后转换的结果可以是DataFrame表格,也可以是Series数据

df.stack()是指定列层级的数据转到行方向,现在是做相反的操作,unstack()函数结构如下:

df.unstack(level=1,fill_name=None)

level:指定要转换到列方向的索引层级,可以是索引或标签,如果有指定多个索引层级,则放置在列表中。

fill_name:如果转换时产能缺失值,则可以设置替换值。


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向1.xlsx" , index_col = 0 )

print (df)

t=df.stack().reset_index().rename( columns ={ "level_1":"科目",0:"分数" })

print (t)

返回:

语文 数学
科目
张三 100 91
李四 86 95
王五 63 53

科目 科目 分数
0 张三 语文 100
1 张三 数学 91
2 李四 语文 86
3 李四 数学 95
4 王五 语文 63
5 王五 数学 53

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向2.xlsx" , index_col =[ 0,1 ])

print (df)

t=df.unstack( level =[ 0,1 ]).reset_index()

print (t)

返回:

张三 李四 许流子 郭鬼子
年份 半年
2018年 上半年 522 1135 704 890
下半年 546 663 976 642
2019年 上半年 965 862 1052 941
下半年 646 728 611 1030

level_0 年份 半年 0
0 张三 2018年 上半年 522
1 张三 2018年 下半年 546
2 张三 2019年 上半年 965
3 张三 2019年 下半年 646
4 李四 2018年 上半年 1135
5 李四 2018年 下半年 663
6 李四 2019年 上半年 862
7 李四 2019年 下半年 728
8 许流子 2018年 上半年 704
9 许流子 2018年 下半年 976
10 许流子 2019年 上半年 1052
11 许流子 2019年 下半年 611
12 郭鬼子 2018年 上半年 890
13 郭鬼子 2018年 下半年 642
14 郭鬼子 2019年 上半年 941
15 郭鬼子 2019年 下半年 1030

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向2.xlsx" , index_col =[ 0,1 ])

print (df)

t=df.unstack( level =[ 0 ]).reset_index()

print (t)

返回:

半年 张三 李四 许流子 郭鬼子
年份 年份 2018年 2019年 2018年 2019年 2018年 2019年 2018年 2019年
0 上半年 522 965 1135 862 704 1052 890 941
1 下半年 546 646 663 728 976 611 642 1030